package br.com.arg.aplica.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import br.com.arg.aplica.util.TipoCampoTela;
import br.com.arg.aplica.util.AlinhamentoCampo;;

@Entity
@XmlRootElement
//@Table(name="CAMPO", uniqueConstraints = @UniqueConstraint(columnNames = {"formato", "nome"}))
public class Componente implements Serializable {
	/** Default value included to remove warning. Remove or modify at will. **/
	private static final long serialVersionUID = 1L;
	
	public Componente()
	{
		this.nome = "Nome";
		this.descricao = "Descrição do compo Nome";
		this.tamanho = 12;
		this.textoLivre = "Texto livre para o campo Nome";
		this.tipoCampoTela = TipoCampoTela.TextBox;
		this.valor = "Adenir Ribeiro Gomes";
		this.versao = "001";
		this.setDominios(new ArrayList<Dominio>());
		this.setRegras(new ArrayList<Regra>());		
	}

	@Id
	@NotNull
	@GeneratedValue
	private int id;

	@NotNull
	@Size(min = 1, max = 32)
	private String nome;

	@NotNull
	@Size(min = 1, max = 255)
	private String descricao;

	@NotNull
//		@Digits(fraction = 0, integer = 5)
	private int tamanho;

	@Enumerated
	@NotNull
	@Column(name = "tipo_campo_tela")
	private TipoCampoTela tipoCampoTela;

	@NotNull
	@Size(min = 1, max = 255)
	private String mascara;

	@Enumerated
	@NotNull
	private AlinhamentoCampo alinhamento;

	@NotNull
	@Size(min = 1, max = 255)
	private String valor;

	@NotNull
	@Size(min = 1, max = 10)
	private String versao;

	@NotNull
	@Size(min = 1, max = 255)
	private String textoLivre;

	@NotNull
	@Size(min = 1, max = 255)
	private String regra;
	
	@OneToMany(cascade = CascadeType.ALL)
	private List<Dominio> dominios;
	
	@OneToMany(cascade = CascadeType.ALL)
	private List<Regra> regras;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public int getTamanho() {
		return tamanho;
	}

	public void setTamanho(int tamanho) {
		this.tamanho = tamanho;
	}

	public TipoCampoTela getTipoCampoTela() {
		return tipoCampoTela;
	}

	public void setTipoCampoTela(TipoCampoTela tipoCampoTela) {
		this.tipoCampoTela = tipoCampoTela;
	}

	public String getMascara() {
		return mascara;
	}

	public void setMascara(String mascara) {
		this.mascara = mascara;
	}

	public AlinhamentoCampo getAlinhamento() {
		return alinhamento;
	}

	public void setAlinhamento(AlinhamentoCampo alinhamento) {
		this.alinhamento = alinhamento;
	}

	public String getValor() {
		return valor;
	}

	public void setValor(String valor) {
		this.valor = valor;
	}

	public String getVersao() {
		return versao;
	}

	public void setVersao(String versao) {
		this.versao = versao;
	}

	public String getTextoLivre() {
		return textoLivre;
	}

	public void setTextoLivre(String textoLivre) {
		this.textoLivre = textoLivre;
	}

	public String getRegra() {
		return regra;
	}

	public void setRegra(String regra) {
		this.regra = regra;
	}

	public List<Dominio> getDominios() {
		return dominios;
	}

	public void setDominios(List<Dominio> dominios) {
		this.dominios = dominios;
	}

	public List<Regra> getRegras() {
		return regras;
	}

	public void setRegras(List<Regra> regras) {
		this.regras = regras;
	}	
}

